package ve.com.wayoyo.wuml_case;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompConector;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.Componente;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Typeface;
import android.text.style.TypefaceSpan;
import android.util.Xml;

public class Painter {

	private static Painter _instance;
	private static int BackgroundColor = Color.WHITE;
	private Painter(){
		
	}
	
	static public Painter  getInstancia(){
		if(_instance == null){
			_instance =  new Painter();
			return _instance;
		}else{
			return _instance;
		}
	}
	
	public Paint getBorderPaint(int estate){
		Paint respuesta = new Paint();
		respuesta.setStrokeWidth(3);
		respuesta.setAntiAlias(false);
		respuesta.setStyle(Style.STROKE);
		switch (estate) {
		case Componente.SELECTED:
			respuesta.setColor(Color.GREEN);
			break;
			
		case Componente.CONNECTING:
			respuesta.setColor(Color.BLUE);
			break;
			
		case Componente.LINKED:
			respuesta.setColor(Color.YELLOW);
			break;
			
		case Componente.INSIDE_PACKAGE:
			respuesta.setColor(Color.YELLOW);
			break;	

		case Componente.INSIDE_DEFAULT_PACKAGE:
			respuesta.setColor(Color.RED);
			break;
			
		default:
			respuesta.setColor(Color.BLACK);
			break;
		}
		
		return respuesta;
	}
	
	public Paint getDefaultBorderPaint(){
		Paint respuesta = new Paint();
		respuesta.setStrokeWidth(3);
		respuesta.setAntiAlias(false);
		respuesta.setColor(Color.BLACK);
		return respuesta;
	}
	
	public Paint getLineTypePaint(int State,int lineType){
		Paint respuesta = new Paint();
		respuesta.setStrokeWidth(3);
		respuesta.setStyle(Style.STROKE);
		respuesta.setAntiAlias(false);
		if(lineType == CompConector.NORMAL_TYPE){
			switch (State) {
			case CompConector.SELECTED_STATE:
				respuesta.setColor(Color.GREEN);
			break;
			default:
				respuesta.setColor(Color.BLACK);
			break;
			}
		}else if (lineType == CompConector.DASHED_TYPE){
			respuesta.setPathEffect(new DashPathEffect(new float[] {5,5}, 0));
			switch (State) {
			case CompConector.SELECTED_STATE:
				respuesta.setColor(Color.GREEN);
			break;
			default:
				respuesta.setColor(Color.BLACK);
			break;
			}
		}
		return respuesta;
	}
	
	public Paint getArrowPaint(int State,boolean isFilled){
		Paint respuesta = new Paint();
		respuesta.setStrokeWidth(3);
		if(isFilled){
			respuesta.setStyle(Style.FILL);
		}else{
			respuesta.setStyle(Style.STROKE);
		}
		respuesta.setAntiAlias(true);
		switch (State) {
		case CompConector.SELECTED_STATE:
			respuesta.setColor(Color.GREEN);
		break;
		default:
			respuesta.setColor(Color.BLACK);
		break;
		}
		return respuesta;
	}
	
	public Paint getTextPaint(boolean isCursive,float scale){
		Paint respuesta = new Paint();
		respuesta.setAntiAlias(true);
		respuesta.setColor(Color.BLACK);
		if(isCursive){
			respuesta.setTypeface(Typeface.create(Typeface.SERIF,Typeface.ITALIC));
		}else{
			respuesta.setTypeface(Typeface.SANS_SERIF);
		}
		respuesta.setFilterBitmap(true);
		respuesta.setTextSize(25*scale);
		return respuesta;
	}
	
	public Paint getFillPaint(){
		Paint respuesta = new Paint();
		respuesta.setStrokeWidth(3);
		respuesta.setStyle(Style.FILL);
		respuesta.setColor(BackgroundColor);
		return respuesta;
	}
}
